#pragma once

#include "Namespaces.h"

ref class Utility abstract sealed {
	private:
		static Func<int, String ^> ^s_GetPrivateResourceStringFn;

		static Utility(void);

	public:
		generic<typename CT>
		static Action<CT> ^GeneratePrivateMethodDelegate(String ^Method);
		generic<typename CT, typename FT>
		static Func<CT, FT> ^GeneratePrivateFieldGetDelegate(String ^Field);
		generic<typename CT, typename FT>
		static Action<CT, FT> ^GeneratePrivateFieldSetDelegate(String ^Field);
		
		static String ^GetPrivateResourceString(int ID);
};

